﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
using SchoolsBI;
public partial class Profesores_CargaMasiva : System.Web.UI.Page
{
    
    
    protected void Page_Load(object sender, EventArgs e)
    {
        
        CboModalidad.seleciona += new cboSelected(CboModalidad_seleciona);
        Label lbtit = (Label)Master.FindControl("lblTitulo");
     

        if (!IsPostBack)
        {
            CboModalidad.SourceData = "proc_getModalidades " + biFactory.IdMateria.ToString();
            CboModalidad.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
            CboModalidad.NameId = "IdMateriaModalidad";
            CboModalidad.NameDescript = "Modalidad";
            CboModalidad.AutoSelect = false;
            CboModalidad.BindCBO();
            
        }
        else {
            guardate();
        }

    }

    private void guardate()
    {
        if (Request.Form["Guardar"]!=null)
        {
            Response.Write("periodo:"+biFactory.Per.IdPeriodo);
            Response.Write("idMateria" +biFactory.IdMateria);
            Response.Write("idCurso"+biFactory.IdCurso);

            for (int i = 0; i < Request.Form.Count; i++)
            {
                if(Request.Form.GetKey(i).ToString().IndexOf("cbo")>=0){
                   // ConDataSet(i);
                    Save(i);
                   
                    }
            }
        }
    }

    private void Save(int i)
    {
        SchoolsBI.Notas n = new Notas();
        n.IdMateria = biFactory.IdMateria;
        n.IdPeriodo = biFactory.Per.IdPeriodo;
        n.IdAlumnoCurso = Convert.ToInt32(Request.Form.GetKey(i).Substring(7).ToString());

        n.addNotas(Request.Form[i].ToString(), CboModalidad.Value);

        n.Crear();
        biFactory.registra("CargaMasiva", "Guarda notas: IdMateria:" + n.IdMateria + " IdPeriodo:" + n.IdPeriodo +" IdAlumnoCurso "+ n.IdAlumnoCurso + " nota: " + n.Nota);
    }

    private void ConDataSet(int i)
    {

        dsNotasTableAdapters.NotasTableAdapter da = new dsNotasTableAdapters.NotasTableAdapter();
        dsNotasTableAdapters.NotasModalidadTableAdapter daMod = new dsNotasTableAdapters.NotasModalidadTableAdapter();
        dsNotas.NotasDataTable dt = new dsNotas.NotasDataTable();
        dsNotas.NotasModalidadDataTable dtMod = new dsNotas.NotasModalidadDataTable();
        da.Fill(dt);
        daMod.Fill(dtMod);

        dsNotas.NotasRow rNota = dt.NewNotasRow();
        rNota.IdMateria = biFactory.IdMateria;
        rNota.IdPeriodo = biFactory.Per.IdPeriodo;
        rNota.IdAlumnoCurso = Convert.ToInt32(Request.Form.GetKey(i).Substring(7).ToString());

        int idNota = rNota.IdNota;


        string[] aNotas = Request.Form[i].ToString().Split(new char[] { ',' });

        //hallar el promedio
        Single Suma = 0;
        int Cantidad = 0;
        Single Promedio = 0;
        foreach (string n in aNotas)
        {
            dsNotas.NotasModalidadRow rNotaMod = dtMod.NewNotasModalidadRow();
            rNotaMod.IdNota = idNota;
            rNotaMod.IdModalidad = CboModalidad.ValueInt;
            if (gos.Fun.IsNumeric(n))
            {
                rNotaMod.Nota = Convert.ToDecimal(n);
                Suma += Convert.ToSingle(n);
                Cantidad += 1;
            }
            dtMod.AddNotasModalidadRow(rNotaMod);

        }

        Promedio = Suma / Cantidad;

        rNota.Nota = Promedio;
        rNota.ComentarioNota = aNotas[aNotas.Length - 1];
        dt.AddNotasRow(rNota);
        da.Update(dt);
        daMod.Update(dtMod);

    }

    void CboModalidad_seleciona(string param1, string param2)
    {
        MateriaModalidad omm = MateriaModalidad.Buscar("IdMateriaModalidad = " + CboModalidad.Value);
        if (omm != null)
        {
            cboNroNota.Items.Clear();
            for (int i = 1; i <= omm.CantidadNotas; i++)
            {
                cboNroNota.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }
            ShowData();
        }
    }
    
    void ShowData() { 

        XmlDataAlumnos xdalumnos = new XmlDataAlumnos();

        XmlDocument osource = xdalumnos.getDataNota(biFactory.IdCurso,biFactory.IdMateria  ,biFactory.Per);

        DataTable dt = new DataTable("Alumno");
        DataRow r = dt.NewRow();
        DataColumn c;

        c = new DataColumn("ID");

        c.DataType = System.Type.GetType("System.Int32");
        c.Unique = true;

        dt.Columns.Add(c);

        c = new DataColumn("Alumno");
        c.DataType = System.Type.GetType("System.String");
        c.MaxLength = 60;
        dt.Columns.Add(c);

        //cuantas notas por modalidad
        int  nCantNotas = cboNroNota.Items.Count ;
        for (int n = 0; n < 6; n++)
        {
            c = new DataColumn("Nota"+n);
            c.DataType = System.Type.GetType("System.String");
            c.MaxLength = 60;
            dt.Columns.Add(c);

        }

        c = new DataColumn("Observacion" );
        c.DataType = System.Type.GetType("System.String");
        c.MaxLength = 60;
        dt.Columns.Add(c);



        foreach (XmlNode xAlu in osource.SelectNodes("//alumno"))
            {
            r = dt.NewRow();
            XmlElement a = (XmlElement)xAlu;
            r["ID"] = a.GetAttribute("idAlumnoCurso");
            r["Alumno"] = a.GetAttribute("nombre");
            //mostrar la nota en funcion de la modadlidad
            int iIndex = 0 ;
            r["Observacion"] = "";
            foreach (XmlNode nMod in a.SelectNodes("notas[@IdPeriodo="+ biFactory.Per.IdPeriodo.ToString() +"]/nota/item[@IdModalidad=" + CboModalidad.Value + "]"))
            {
                if (iIndex > 5)
                    iIndex = 5;
                r["Nota" + iIndex] = nMod.InnerText;
                if(cboNroNota.SelectedIndex==iIndex)r["Observacion"] = nMod.Attributes["detalle"].Value;
                iIndex++;
            };
            
            dt.Rows.Add(r);
        }

        DataSet ds = new DataSet("mio");
        ds.Tables.Add(dt);


        GridView1.DataSource = dt;
        GridView1.DataBind();
        
        //Ocultar columnas que no uso
        for (int i = 2; i < GridView1.Columns.Count-1; i++)
        {
            GridView1.Columns[i].Visible = (cboNroNota.Items.Count>=i-1);
        }

        if (CboModalidad.ValueInt > 0)
        {
            botBar.Style["display"] = "";
            butBar2.Style["display"] = "";
        }
        else
        {
            botBar.Style["display"] = "none";
            butBar2.Style["display"] = "none";
        }
   
    }

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {

    }

    protected void cmdGuardar_Click(object sender, EventArgs e)
    {
        if (Int16.Parse(cboNroNota.Text )> 0)
        {
            SaveNotas();
            //actualizar el promedio
            ShowData();
        }
        else {
            lblMensaje.Text = "El numero de nota debe ser mayor a 0";
        }

        
    }

    private void SaveNotas()
    {
        lblMensaje.Text = "";
        foreach (GridViewRow rg in GridView1.Rows)
        {
            Controles_cboNumerico cNota = ((Controles_cboNumerico)(rg.FindControl("CboNumerico" + cboNroNota.SelectedValue)));
            string sObser = ((TextBox)rg.FindControl("TxtObervacion")).Text;
            if (sObser.Length == 0) { sObser = txtObservacion.Text; }

            if (!cNota.Borrado)
            {
                if(cNota.Value>-1)
                    biFactory.registra("CargaMasiva:Guarda", "idMateria:" + biFactory.IdMateria + " IdPeriodo:"+ biFactory.Per.IdPeriodo.ToString() + "idAlumnoCurso:" + rg.Cells[0].Text + "-nota:" + cNota.Value + "-Modalidad:" + cboNroNota.SelectedValue);
                SaveDS(Convert.ToInt32(rg.Cells[0].Text), cNota.Value, sObser, Convert.ToInt16(cboNroNota.SelectedValue));
            }
            else {
                biFactory.registra("CargaMasiva:Borra", "idAlumnoCurso:" + rg.Cells[0].Text + "-nronota:" + cboNroNota.SelectedValue);
                EliminarNota(Convert.ToInt32(rg.Cells[0].Text), Convert.ToInt16(cboNroNota.SelectedValue));
            }
        }
    }

    private void EliminarNota(int IdAlumnoCurso, short NotaNro)
    {
        try
        {
            SchoolsBI.Notas n = Notas.Buscar("IdAlumnoCurso =" + IdAlumnoCurso + " and IdMateria = " + biFactory.IdMateria + " and IdPeriodo = " + biFactory.Per.IdPeriodo);
            SchoolsBI.NotasModalidad nm = NotasModalidad.Buscar("idNota = " + n.IdNota + " and NroNota =" + NotaNro);
            lblMensaje.Text+=  nm.Borrar();
        }
        catch (Exception ex)
        {
            lblMensaje.Text += ex.Message;
        }
         
    }
    private void SaveDS(Int32 IdAlumnoCurso, Single nota , String Obser, Int16 NotaNro)
    {
        
        if (nota > -1 )
        {
            SchoolsBI.Notas n = new Notas();
            n.IdMateria = biFactory.IdMateria;
            n.IdPeriodo = biFactory.Per.IdPeriodo;
            n.IdAlumnoCurso = IdAlumnoCurso;
            n.AddNotaModalidad(nota, CboModalidad.ValueInt, Obser, NotaNro);
            
            n.ComentarioNota = txtObservacion.Text;
           lblMensaje.Text +=  n.Crear();
        }

    }

    protected void GridView1_DataBound(object sender, EventArgs e)
    {
    
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void GridView1_RenderRow(object sender, GridViewRowEventArgs e)
    {
       //    Panel thisPanel=  (Panel)e.Row.FindControl("panel1");
        /*
        Controles_cboNumerico cn = new Controles_cboNumerico();
        cn.TipoIngreso = NotaTipoIngreso.Letra;
        cn.Selected = DataBinder.Eval(e.Row.DataItem, "Nota0").ToString();
        cn.Enabled = true;
         * */
       // TextBox tx = new TextBox();
        //tx.Text = DataBinder.Eval(e.Row.DataItem, "Nota0").ToString();
       // thisPanel.Controls.Add(tx);
        /*
        if (e.Row.RowType == DataControlRowType.DataRow)
        {/*
            // determine the value of the UnitsInStock field
            
            int Soportes = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Nota0"));
            if (Soportes > 0)
            {
                e.Row.BackColor = System.Drawing.Color.Pink ;
            }
          * 
        }
         * */
    }
    protected void cmdVolver_Click(object sender, EventArgs e)
    {
        SaveNotas();
        Response.Redirect("Resumen.aspx");
    }

    protected void cboNroNota_SelectedIndexChanged(object sender, EventArgs e)
    {
        SaveNotas();
        ShowData();
    }
}

public class DataGridTemplate : ITemplate
{
    ListItemType templateType;
    string columnName;

    public DataGridTemplate(ListItemType type, string colname)
    {
        templateType = type;
        columnName = colname;
    }

    public void InstantiateIn(System.Web.UI.Control container)
    {
        Literal lc = new Literal();
        switch (templateType)
        {
            case ListItemType.Header:
                lc.Text = "<B>" + columnName + "</B>";
                container.Controls.Add(lc);
                break;
            case ListItemType.Item:
                lc.Text = "Item " + columnName;
                Controles_cboNumerico nota = new Controles_cboNumerico();
                /*
                nota.TipoIngreso = NotaTipoIngreso.Letra;
                nota.Enabled = true;
                */
                TextBox tx = new TextBox();
               
                container.Controls.Add(tx);
                break;
            case ListItemType.EditItem:
                TextBox tb = new TextBox();
                tb.Text = "";
                container.Controls.Add(tb);
                break;
            case ListItemType.Footer:
                lc.Text = "<I>" + columnName + "</I>";
                container.Controls.Add(lc);
                break;
        }
    }
}
